Skip to content

feat(web): React UI v2.0 — Phase 3 Task 36 (App wiring) — Phase 3 complete#25

Merged
aksOps merged 1 commit into
mainfrom
feat/web-phase-3-wiring
May 16, 2026
Merged

feat(web): React UI v2.0 — Phase 3 Task 36 (App wiring) — Phase 3 complete#25
aksOps merged 1 commit into
mainfrom
feat/web-phase-3-wiring

Conversation

@aksOps

@aksOps aksOps commented May 16, 2026

Copy link
Copy Markdown
Contributor

Summary

Final task of Phase 3 — wires Topbar + FlowStrip + SessionsRail + Statusbar into a working <App> shell. This is the first runnable end-to-end render of the React UI v2.0. After this lands, Phase 3 is complete (Tasks 32-36 all merged).

  • Modified web/src/App.tsx — composes Phase 3 shell components, subscribes to Phase 2 hooks (useUiHints, useSessionList, useApprovalsQueue, useAgentDefinitions, useSessionFull). Manages local activeSid state for session selection. Canvas + monitor rail are placeholder panes (Phase 4 + 5 fill them).
  • Modified web/src/main.tsx — wraps <App> in QueryClientProvider + SelectedRefProvider, mounts <IconSprite> once at root.
  • Modified web/vite.config.ts — added @/./src resolve alias. Required for production builds (was previously only in tsconfig + vitest config; Vite dev didn't need it for the placeholder App but now does for import {...} from '@/...').
  • Created web/tests/component/App.test.tsx — 4 tests: brand renders from useUiHints, empty SessionsRail, Statusbar version, canvas empty state.

Validation

  • cd web && npm install → 0 vulnerabilities
  • npm run typecheck → exit 0
  • npx vitest run91 passed / 0 failed (Phase 3 shell's 87 + 4 new App tests)
  • npm run build → clean, 247 kB JS (76 kB gzip) — first build with real component imports

Nothing touches src/runtime/ — no dist/app.py regen.

What you see now

Running cd web && npm run dev (or serving the production build) shows the full 3-pane shell with:

  • Topbar showing the brand name from ui-hints
  • FlowStrip rendering agent nodes from /api/v1/agents
  • SessionsRail listing sessions from /api/v1/sessions (or empty state)
  • Statusbar showing connection + vm_seq + versions
  • Canvas placeholder ("Select a session from the rail or create a new one.")
  • Monitor rail placeholder ("Ambient monitors (Phase 5)")

No interactions yet — the onSearch/onNew/onApprovalsClick callbacks are no-ops; modals come in Phase 6.

Phase 3 retrospective

Task Component Tests
32 7
33 3
34 8
35 5
36 wiring 4
Total 27 new + 64 from Phase 2 = 91

What's next

Phase 4 (Tasks 37-42): Canvas — CanvasHead, Sidenote, Turn, HITLBand, Transcript assembly, SessionCanvas top-level. These plug into the empty canvas slot.

Test plan

  • Vitest: 91/91 pass
  • Typecheck: exit 0
  • Build: clean
  • Pytest backend stays green
  • CI: lint + type + test + sonar + bundle + skill-lint
  • CI: SonarCloud quality gate

🤖 Generated with Claude Code

Composes the Phase 3 shell components (Topbar, FlowStrip, SessionsRail,
Statusbar) and Phase 2 data hooks (useUiHints, useSessionList,
useApprovalsQueue, useAgentDefinitions, useSessionFull) into a working
<App> that renders the empty 3-pane shell. Canvas is an empty-state
placeholder (Phase 4); monitor rail is a placeholder (Phase 5).

main.tsx now wraps <App> in QueryClientProvider + SelectedRefProvider
and mounts the IconSprite. vite.config.ts gains the same '@/' alias as
vitest.config.ts (build broke without it now that main/App use '@/').

Tests: 4 new App.test.tsx cases (brand name from useUiHints, empty
SessionsRail, Statusbar version, canvas empty-state) — full suite
remains green at 91 passing.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@sonarqubecloud

Copy link
Copy Markdown

@aksOps aksOps merged commit 1cfcc04 into main May 16, 2026
9 checks passed
@aksOps aksOps deleted the feat/web-phase-3-wiring branch May 16, 2026 10:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant